#include <malloc.h>
#include <time.h>
#include<stdio.h>
#include<stdlib.h>

/**** petite macro pour choisir le type des matrices et vecteurs (entiers, reels) ******/
// gcc -DTYPE_INT
#ifdef INT
typedef int T;
#else
#ifdef FLOAT
typedef float T;
#else
 #error "Need to give MACRO definition for element type : -DINT or -DFLOAT"
#endif
#endif
/***************************************************************************************/


#include "fonctions.c"



/*********** programme principal********************************/ 

int main(int argc, char *argv[])
{


	//declarations parametres
	// on precisera la taille des matrices en ligne de commande
	int dim=atoi(argv[1]);
	int f_compteur=atoi(argv[2]);
	int i,j;
	
	int valeurmax,valeurmin;
	
	T* u;
	T* v;

	//pour le stockage BND de matrices creuses
	T **Bande; //stocke les valeurs des coefficients non nuls par bande
	int nbBandeSup=0;
	int nbBandeInf=0;
	int n=nbBandeSup+nbBandeInf+1;
 
	//allocation dynamique matrice Bande eqivalent a une diagonale (coeff aléatoires)
	Bande=(T**)malloc(dim*sizeof(*Bande));
	v=(T*)malloc(dim*sizeof(T));
	u=(T*)malloc(dim*sizeof(T));
	
	valeurmax=100000;
	valeurmin=-100000;
	
	for(i=0;i<dim;i++)
	{
		Bande[i]=(T*)malloc(n*sizeof(**Bande));
    }
    for(i=0;i<dim;i++)
    {
	   Bande[i][nbBandeInf]=(T)rand()*(valeurmax-valeurmin)+valeurmin;
	   u[i]=(T)1;
    }
		


	// appel fonction produit
	SPMV_BND(Bande,u,v,dim,nbBandeInf,nbBandeSup,f_compteur);

	/**************liberation memoire***********************************************/
	//liberation en memoire de A,u et v
	for(i=0;i<dim;i++)
	{
		Bande[i];
	}
	free(u);
	free(v);

/****************************************************************************/

return 0;
}
